//动态内存分配
#include<stdlib.h>
#include<stdio.h>
int main(){
  //动态内存申请空间 malloc()
  int *ptr = (int *)malloc(40);
  if(ptr==NULL){
    perror("malloc");
  }
  for (int i = 0; i < 10; i++)
  {
    *(ptr+i) = i;
  }
  //我还还可以对动态内存进行初始化分配,calloc()就可以满足这个功能
  int * ptr1 = (int *)calloc(10,sizeof(int));
  //这样一个大小为10的整形数组,内容都为0的一个空间都创建出来了

  //那么,如果我们想对已经分配好的动态内存空间进行扩容该怎么办呢,这时,realloc()就起到了作用
  int* ptr2 = (int *)realloc(ptr1,80);//对已经分配好的内存重新定义大小
  //此时,我们不能将ralloc()的返回值直接复制给ptr,因为realloc()也有可能动态内存分配失败,
  //如果动态内存分配失败的话,并且把返回的空指针复制给了ptr的话,我们原来的内存也会受到影响,
  //所以我们需要进行一步非空的校验,如果不为空就把ptr2复制给ptr;
  if(ptr2!=NULL){
    ptr = ptr2;
  }
  //动态内存释放空间
  free(ptr);
  ptr = NULL;
}